(function ($, pilote, undefined){

    /************************/
    /* VARIABLES DE L'OBJET */
    /************************/
    
    // Variable 'alias' permettant de ne pas tout le temps à avoir a réécrire le prototype
    var proto = pilote.util.createClass('Hand.object').prototype;
    
    // Variables de gestion des cartes
    proto.deck = null;
    proto.selectedCard = null;
    
	// Variable de gestion du template
    proto.template = null;
        
    /***************************/
    /* CONSTRUCTEUR DE L'OBJET */
    /***************************/
    /**
     * Constructeur de l'objet
     * @param object template : objet jquery permettant de spécifier le contexte de l'action de l'objet
     */
    proto.initialize = function (template) {
    	var self = this;
    	self.template = template;
    };  
    
    /*********************************/
    /* METHODES/FONCTIONS DE L'OBJET */
    /*********************************/
    /**
     * Méthode de mise en place des éléments de l'onglet
     * @param array listElement : liste contenant les cartes à ajouter à l'objet
     */
    proto.setData = function(listElement){
        var self = this;
        self.deck = listElement;
    }
    /**
     * Méthode d'affichage de l'objet
     */
    proto.show = function(){
    	var self = this
    		str = '<ul>';
    	// Création du html
    	for ( var indx = 0 ;indx < self.deck.length;indx++ ){
    		str += '<li>%s</li>'.format(self.deck[indx].toString());
    	}
    	// Affichage
    	self.template.html('%s</ul>'.format(str));
    	self.template.show();
    }
    
    /**
     * Méthode permettant de cacher l'objet
     */
    proto.hide = function(){
    	var self = this;
    	self.template.hide();
    }
    
    /**
     * Méthode d remise à zéro de l'objet
     */
    proto.reset = function(){
    	var self = this;
    	self.deck = null;
    	self.selectedCard = null;
    }
        
    /**
     * Méthode de sélection d'une carte
     * @param int id : identifiant de la carte
     * @param object li : objet javascript pointant vers l'élément de la liste contenant la carte
     */
    proto.selectCard = function(id, li){
    	var self = this;
    	// Gestion de la precédante selection
    	if (!!self.selectedCard){
    		// Suppression de la balise selected de l'ancien li
    		self.template.find('li.selected').removeAttr('class');
    	}
    	// Gestion de l'affichage
    	li.attr('class', 'selected');
    	// Sauvegarde de la carte selectionné
		self.selectedCard = id;
    }
    
    /**
     * Fonction de récupération de la carte sélectionnée par le joueur
     * @return object Card
     */
    proto.getSelectedCard = function(){
        var self = this;
        // Gestion de la taille du plateau
        if (!!self.selectedCard){
        	return self.deck[self.selectedCard];
        }
        return null;
    }

})(window.jQuery, window.pilote);